package cn.micai.base.memcached;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

import java.util.Map;

/**
 * @Auther: zhaoxinguo
 * @Date: 2018/8/24 14:55
 * @Description:
 */
public class MemcachedDemo {

    public static void init() {
        /**
         * 初始化SockIOPool，管理memcached的连接池
         */
        String [] servers = {"127.0.0.1:11211"};
        SockIOPool pool = SockIOPool.getInstance();
        pool.setServers(servers);//设置服务器
        pool.setFailover(true);//容错
        pool.setInitConn(10);//设置初始连接数
        pool.setMinConn(5);//设置最小连接数
        pool.setMaxConn(25);//设置最大连接数
        pool.setMaintSleep(30);//设置连接池维护线程的睡眠时间
        pool.setNagle(false);//设置是否使用Nagle算法
        pool.setSocketTO(3000);//设置socket的读取等待超时时间
        pool.setAliveCheck(true);//设置连接心跳检测开关
        pool.setHashingAlg(SockIOPool.CONSISTENT_HASH);//设置Hash算法
        pool.initialize();
    }

    public static void main(String [] args) throws Exception {
        init();
        /**
         * 建立MemcachedClient实例
         */
        MemCachedClient memCachedClient = new MemCachedClient();

        // 使用Memcached-Java-Client的API设置缓存的值
        memCachedClient.add("key", 1);//add()方法新增缓存，如果缓存服务器存在同样的key，则返回false
        memCachedClient.set("key", 2);//set()方法将数据保存到缓存服务器，如果缓存服务器存在同样的key，则将其替换
        memCachedClient.replace("key", 3);//replace()方法可以用来替换服务器中相同的key的值，如果缓存服务器不存在这样的key，则返回false

        // 使用Memcached-Java-Client的API获取缓存的值
        Object value = memCachedClient.get("key");
        System.out.println(value);

        String[] keys = {"key1", "key2"};
        Map<String, Object> values = memCachedClient.getMulti(keys);

        // 对缓存进行append和prepend操作
        memCachedClient.set("key-name", "zhaoxinguo");

        // 对缓存的数据进行增量与减量操作
        memCachedClient.incr("key", 1);
        memCachedClient.decr("key", 1);

    }
}
